package cn.itcast.zt.example.singleton;

import cn.itcast.zt.annotation.Recommend;
import cn.itcast.zt.annotation.ThreadSafe;

import java.lang.reflect.Constructor;

/**
 * 静态内部类：最安全
 * 加载一个类时，其内部类不会同时被加载。
 * 一个类被加载，当且仅当其某个静态成员（静态域、构造器、静态方法等）被调用时发生。。
 * 单例结构是会被破坏,反射破坏
 */
public class SingletonExample8Test {
    public static void main(String[] args) {
        // 创建第一个实例
        SingletonExample8 instance1 = SingletonExample8.getInstance() ;

        // 通过反射创建第二个实例
        SingletonExample8 instance2 = null ;
        try {
            Class<SingletonExample8> clazz = SingletonExample8.class ;
            Constructor<SingletonExample8> cons = clazz.getDeclaredConstructor() ;
            cons.setAccessible(true);
            instance2 = cons.newInstance() ;
        }catch (Exception e) {
            e.printStackTrace();
        }

        // 检查两个实例的hash值
        System.out.println("Instance 1 hash:" + instance1.hashCode());
        System.out.println("Instance 2 hash:" + instance2.hashCode());
    }
}
